/**
 * 项目名称:
 *
 * @Author: 夏国倩
 * @Date: 2023/9/11 18:31
 * @Copyright
 *
 * 多态 事物的多种形态
 *  作用：主要是为了做软件的解耦
 *  多态：格式 就是父类的引用变量指向子类对象
 *  父类类型   变量名 = new  子类类型();
 *  变量名.方法名()
 *  public class Fu {
 *      public static void main(String[] args) {
 *          //类的多态使用
 *          Fu f = new Zi();
 *      }
 *  }
 *  class Zi extends Fu{
 *
 *  }
 */
package Polymorphism;

public abstract class Fu {
    int num = 4;
    public abstract void method();
}
class Zi extends Fu{
    int num =5;
    public void method(){
        System.out.println("重写父类的抽象方法");
    }
}
class Test{
   /* public static void main(String[] args) {
        //类的多态使用
        *//*
        多态成员变量
        当子父类出现同名的成员变量的时候，多态调用变量时：
        编译时期：参考的是引用型变量所属的类中是否由被调用的成员变量。没有，编译失败
        运行时期：也是调用引用型变量所属的类中的成员变量
        简单记：编译和运行都参考等号的左边
         *//*
        Fu fu = new Zi();
        System.out.println(fu.num);
        Zi zi = new Zi();
        System.out.println(zi.num);
    }*/
}
class Fu2{
    int num = 4;
    void show(){
        System.out.println("Fu show num");
    }
}
class Zi2 extends Fu2{
    int num = 5;
    void show(){
        System.out.println("Zi show num");
    }
}
class Demo{
    public static void main(String[] args) {
        /*
        多态成员方法
         编译时期：参考引用变量所属的类，如果类中没有调用的方法，编译失败
         运行时期：参考引用变量所指的对象所属的类，并运行对象所属类中的成员方法
         简单来说；编译看左边，运行看右边
         */
        Fu2 f = new Zi2();
        f.show();//Zi show num
        //instanceof关键字
        //判断某个对象是否属于某种数据类型
        //Person p1 = new Student();//前提条件：学生类继承了人类
        //p1 instanceof Student;//判断p1对象是否属于学生类
        //p1 instanceof Person;//判断p1对象是否属于人类
        Zi2 z = new Zi2();
        boolean result = z instanceof Fu2; //true

    }
}
